package com.andy.blog.admin.service.impl;

import com.andy.blog.admin.dto.TagDTO;
import com.andy.blog.admin.service.TagBusService;
import com.andy.blog.common.page.PageUtilsDTO;
import com.andy.blog.common.utils.TransformUtils;
import com.andy.blog.dal.domain.TagDO;
import com.andy.blog.dal.service.ArticleTagDalService;
import com.andy.blog.dal.service.TagDalService;
import com.andy.blog.dal.vo.ArticleTagVO;
import com.andy.blog.dal.vo.TagVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * Created by andy on 2023/6/18 17:12
 */
@Service
public class TagBusServiceImpl implements TagBusService {

    @Resource
    private TagDalService tagDalService;

    @Resource
    private ArticleTagDalService articleTagDalService;

    @Override
    public PageUtilsDTO<TagDTO> selectListByPage(TagVO tagVO) {
        IPage<TagDO> tagDOIPage = tagDalService.selectListByPage(tagVO);
        return PageUtilsDTO.build(tagDOIPage.getTotal(), TransformUtils.transformList(tagDOIPage.getRecords(), TagDTO.class));
    }

    @Override
    public void addTag(TagVO tagVO) {
        tagDalService.addTag(tagVO);
    }

    @Override
    public TagDTO selectTagById(Long tagId) {
        TagDO tagDO = tagDalService.selectById(tagId);
        return TransformUtils.transform(tagDO, TagDTO.class);
    }

    @Override
    public void updateTag(TagVO tagVO) {
        tagDalService.updateById(tagVO);
    }

    @Override
    public List<TagDTO> selectList(TagVO tagVO) {
        List<TagDO> tagDOS = tagDalService.selectList(tagVO);
        return TransformUtils.transformList(tagDOS, TagDTO.class);
    }

    @Override
    public List<TagDTO> listTagVO() {
        List<TagDO> tagDOS = tagDalService.selectList(TagVO.builder().build());
        List<TagDTO> tagDTOS = TransformUtils.transformList(tagDOS, TagDTO.class);

        for (TagDTO tagDTO : tagDTOS) {
            Long tagCount = articleTagDalService.selectCount(ArticleTagVO.builder()
                    .tagId(tagDTO.getId())
                    .build());
            tagDTO.setArticleCount(tagCount);
        }
        return tagDTOS;
    }
}
